
### 项目三 光敏电阻传感器

**项目介绍**：

![image44](../media/f9c66a79affc1091bbcf4bffdc165d45.png)

在套件中，包含两个光敏电阻模块，我们可以利用这两个模块和小车搭配做一个追光智能车。在这一课程中，我们先学习了解下光敏电阻模块和使用方法。

光敏电阻环境光线最敏感，不同的光照强度，光敏电阻的阻值不一样。我们利用光敏电阻该特性，设计电路，生成光敏电阻模块。模块信号端连接单片机模拟口，当光照强度越强时，模拟口电压越大，即单片机的模拟值也大；反之，光照强度越弱时，模拟口电压越小，即单片机的模拟值也小。这样，我们就可以利用光敏电阻模块读取对应模拟值，感应环境中光照强度了。

**参数：**

工作电压：3.3V-5V（DC）

接口：3PIN接口

输出信号：模拟信号

**项目组件：**

| UNO R3 开发板\*1                                       | L298P 电机驱动扩展板 V1\*1                             | LED白发红模块\*1                                       | 光敏电阻传感器\*2                                      |
|--------------------------------------------------------|--------------------------------------------------------|--------------------------------------------------------|--------------------------------------------------------|
| ![image45](../media/67417bd98f12bffd0352f76063e5abbd.png) | ![image46](../media/3dca1bdd1d1420c1d12b16cbf52fee00.png) | ![image47](../media/31fb938502d3d519813c391569d6a3f3.png) | ![image48](../media/3904f90b646ab120574ec87ef129bcf0.png) |
| HX-2.54 3P 双头 26AWG\*2                               | 3Pin 双母头杜邦线\*1                                   | USB线\*1                                               | 18650双节电池盒 (18650电池*2(电池自配))*1              |
| ![image49](../media/27efc7a1e49635f826115ee104e43ed0.png) | ![image50](../media/07752ebfc8e8af62f1b86c4a725ea284.jpg) | ![image51](../media/2adb48888136bedc4d6b37d47a47b292.jpg) | ![image52](../media/c5bf59a8e5cdded95c02334369ab6fdd.png) |

**接线图:**

**⚠️特别注意：坦克智能车已经组装好了，这里不需要把传感器模块和其他的都拆下来又重新组装和接线，这里再次提供接线图，是为了方便您编写代码。但是，LED灯是需要另外连接上去的！**

接线注意：左边的光敏电阻模块的“-”、“+”和S引脚分别接在keyes传感器扩展板G（GND）、V（VCC）、A1；同样地，右边的光敏电阻模块接在G（GND）、V（VCC）A2。我们这里先在左边接一个测试。

![image53](../media/699ddc22f84ee584287e5f3d9f35e035.png)

**项目代码：**

（**特别提醒：在上传程序代码前，需要把蓝牙模块取下，否则代码会上传失败。需要上传代码成功后，再连接蓝牙模块。**）

``` c
/*
  迷你履带坦克机器人
  课程 3.1
  光敏电阻
  http://www.keyes-robot.com
*/

int light;  //定义变量light
void setup() 
{
  Serial.begin(9600);//设置波特率为9600
}

void loop() 
{
  light = analogRead(A1); //读取到的模拟值赋给light变量
  Serial.print("light:");   //打印光线模拟值
  Serial.println(light);
  delay(100);  //延时100ms
}
```

**项目结果：**

上传代码带开发板，打开串口监视，设置波特率为9600。可以看到打印出的光敏传感器检测的值，如果我们用手给它遮挡光线，我们发现值变小了。

![image54](../media/df569697ef22e6be0533b60ce3bad2d0.png)

**代码说明：**

Serial.begin(9600)-初始化串口,串口通信波特率为9600  ，

pinMode- 定义单片机PIN脚模式是输入还是输出，input是输入，output是输出，

analogRead-读取引脚模拟状态，范围为0~1023。

**项目拓展：**

上面我们了解了光敏传感器的工作原理，接下来我们用到两个光敏传感器，分别接在A1（左）和A2（右）。在第9脚接上一个LED
灯，然后通过读取左右两个光敏传感器的状态，来控制LED的亮和灭。如下图接线：

![image55](../media/9bd3c21cc318d3a8f16febf3c3543c61.png)

我们开始来编写代码：

（**特别提醒：在上传程序代码前，需要把蓝牙模块取下，否则代码会上传失败。需要上传代码成功后，再连接蓝牙模块。**）

``` c
/*
  迷你履带坦克机器人
  课程 3.2
  光敏电阻
  http://www.keyes-robot.com
*/

int ledPin = 9; //定义LED管脚为数字口9
int left_light = 0; //定义左边传感器的变量
int right_light = 0; //定义右边传感器的变量
void setup() 
{
  Serial.begin(9600);//设置波特率为9600
  pinMode(ledPin, OUTPUT); //设置LED管脚为输出模式
}

void loop() 
{
  left_light = analogRead(A1); //左边光敏传感器接A1
  right_light = analogRead(A2); //右边光敏传感器接A2
  Serial.print("left_light:");   //打印左边光线模拟值
  Serial.print(left_light);
  Serial.print("  right_light:");   //打印右边光线模拟值
  Serial.println(right_light);
  if (left_light < 300 || right_light < 300)
  { //其中一个模拟值低于300
    digitalWrite(ledPin, HIGH); //点亮LED
  }
  else 
  {
    digitalWrite(ledPin, LOW); //LED熄灭
  }
}
```

上传代码到开发板，用我们的手去一个个的遮掩光敏传感器，我们看看LED灯的状态发生了改变没有？当我们用手去遮挡任一光敏传感器的时候，我们可以看到LED灯亮起来了。串口显示对应光敏传感器的检测也变小了。

![image56](../media/14117dd2943724577e20da2762a039d9.png)